package com.m1.tzolkin.model.util;

import java.io.Serializable;

import com.m1.tzolkin.model.exceptions.EndOfGameException;
import com.m1.tzolkin.model.exceptions.WaitingOperationsException;

/**
 * Un mod�le de compteur de tours.
 * Un compteur de tours est un objet poss�dant un tour actuel et une certaine
 *  quantit� de tours avant sa fin.
 * Il est possible de l'incr�menter afin d'avancer d'un tour.
 * 
 * @inv <pre>
 *     getTurn() >= 0 </pre>
 *     
 * @cons <pre>
 * $DESC$
 *     Un compteur initialis� au jour O avec n tours maximum.
 * $ARGS$
 *     int n
 * $PRE$
 *     n > 0
 * $POST$
 *     getTurn() == 0
 *     getTurns() == n </pre>
 *
 */
public interface ITurnsCounter extends Serializable {
	
	// REQUETES
	
	/**
	 * Retourne le tour actuel.
	 */
	int getTurn();
	
	/**
	 * Retourne le nombre de jours de ce calendrier.
	 */
	int getTurns();
	
	// COMMANDES
	
	/**
	 * Avance d'un tour.
	 * @pre <pre>
	 *     getTurn() + 1 < getTurns() </pre>
	 */
	void incTurn() throws EndOfGameException, WaitingOperationsException;
	
	/**
	 * Avance le compteur de d tours.
	 * @pre <pre>
	 *     d >= 0
	 *     getTurn() + d < getTurns() </pre>
	 */
	void incTurn(int d) throws EndOfGameException, WaitingOperationsException;

}
